iOS开发 子视图中获取父控制器、父视图 发表于 2019-06-13 | Objective-C123456789101112131415161718192021222324252627282930313233343536/**获取父控制器@param view 当前视图@param className 需要获取的控制器名称@return 返回控制器对象*/- (UIViewController *)LCZGetSuperViewController:(UIView *)currentview superViewControllerClassName:(NSString *)className{ for (UIView* next = [current superview]; next; next = next.superview) { UIResponder *nextResponder = [next nextResponder]; if ([nextResponder isKindOfClass:[NSClassFromString(className) class]]) { return (UIViewController *)nextResponder; } } return nil;}/**获取当前视图中的目标父视图@param currentView 当前视图@param superView 父视图@return 父视图对象*/- (UIView *)LCZGetSuperView:(UIView *)currentView superView:(UIView *)superView { UIView *view = currentView.superview; while (![view isKindOfClass:[superView class]]) { if (view.superview == nil) { return nil; } else { view = [view superview]; } } return view;} Swift123456789101112131415161718192021222324252627282930313233/// 通过当前视图获取父视图的控制器////// - Parameters:/// - currentView: 当前视图/// - viewController: 需要获取到的控制器/// - Returns: 返回控制器func LCZGetSuperViewController<T: UIViewController>(currentView:UIView, viewController: T.Type) -> T? { var view: UIView = currentView.superview! while view.next!.isKind(of: T.self) != true { guard view.superview != nil else { return nil } view = view.superview! } return view.next as? T}/// 获取当前视图中的目标父视图////// - Parameters:/// - currentView: 当前视图/// - superView: 目标父视图/// - Returns: 返回父视图public func LCZGetSuperView<T: UIView>(currentView: UIView, superView: T.Type) -> T? { var view: UIView = currentView.superview! while view.isKind(of: T.self) != true { guard view.superview != nil else { return nil } view = view.superview! } return view as? T} 坚持原创技术分享,您的支持将鼓励我继续创作! Donate WeChat Pay Alipay